﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Web;

/// <summary>
/// Descripción breve de ctrlPreRegistro
/// </summary>
public class ctrlPreRegistro
{
    MySqlClase mysql = new MySqlClase();
    ctrRecibo recbo_nuevoIngreso = new ctrRecibo();
    private string msj = "", sql = "";

    public string Msj
    {
        get { return msj; }
        set { msj = value; }
    }

    /// <summary>
    /// metodo que hace una insercion a la tabla de pre-registro de la base de datos
    /// </summary>
    /// <param name="PreR">objeto de la clase preRegistro</param>
    /// <returns>Idpreregistro del interesado</returns>

    public int altasPreRegistro( clasePreRegistro PreR) {
        int id = 0, _id = 0;
        try {
            ArrayList lista= this.generarNumReferencial(PreR);

            id = (this.mayor(1, 1) + 1);

            sql = @"insert into preregistro values(" + id +
            "," + lista[0] +
            ",'" + PreR.Nom +
            "','" + PreR.ApP +
            "','" + PreR.ApM +
            "'," + PreR.FechNac.ToShortDateString() +
            ",'" + PreR.Dir +
            "','" + PreR.Tel +
            "','" + PreR.Cel +
            "','" + PreR.Email +
            "','" + PreR.EdoCivil +
            "','" + PreR.Plan +
            "','" + PreR.TipSangre +
            "','" + PreR.EscProcedencia +
            "'," + PreR.Promedio +
            ",'" + PreR.Estado +
            "'," + PreR.Periodo +
            "," + PreR.Uno +
            "," + PreR.Dos +
            ",'" + lista[2] + "'); commit;";

            if (mysql.EjecutarSql(sql))
            {
                recbo_nuevoIngreso.envioConfirmacion(PreR, lista[1].ToString());
                _id = this.ultimoId();
            }
            else { msj = "No se ha podido completar el registro"; this.rollback(); }
            
        }
        catch { msj = mysql.MensajeError; }
        return _id;
    }

    /// <summary>
    /// Busca en la tabla de pre_registro la ultimo id o la ultimo matricula 
    /// </summary>
    /// <param name="camp">1.-idpre-registro   ó 2.-matricula numero mayor</param>
    /// <param name="tab">1.- pre-registro ó 2.-numeroFer Pre-registro </param>
    /// <returns></returns>
    public int mayor(int camp, int tab) {
        int mat = 0;
        string campo = "", tabla = "";
        
        switch (tab)
        {
            case 1: tabla = "preregistro"; break;
            case 2: tabla = "preregistro_ref"; break;
            default: tabla = ""; break;
        }

        if (tab == 1)
        {
            switch (camp)
            {
                case 1: campo = "idpreregistro"; break;
                case 2: campo = "matriculaPre"; break;
                default: campo = ""; break;
            }
        }
        else { campo = "idpreregistro_ref"; }


        sql = "select max(" + campo + ") from " + tabla + ";";

        try {
            mysql.AbrirConexion();
            if (mysql.Consultar(sql))
            {
                while (mysql.DatosConsulta.Read())
                {
                    mat = mysql.DatosConsulta.GetInt32(0);
                }
                
            }
        }
        catch { mat = 1; }
        mysql.CerrarConexion();
        return mat;
    }

    /// <summary>
    /// metodo privado que genera el numero referencial de interesado que realiza el pre-registro
    /// </summary>
    /// <param name="p"></param>
    /// <returns></returns>
    private ArrayList generarNumReferencial(clasePreRegistro p) {
        string referencia = "";
        ArrayList lis = new ArrayList();
        string car1 = "", car2 = "";
        string matricula = "";
        if (p.Uno < 10)
            car1 = "0" + p.Uno;
        else car1 = p.Uno.ToString();
        
        if (p.Dos < 10)
            car2 = "0" + p.Dos;
        else car1 = p.Dos.ToString();

        try
        {
            referencia = "00767507410/" + car2 +
                DateTime.Now.Year + "" + DateTime.Now.Month + ""
                + car1 + "" + (this.mayor(1,2) + 1) + this.mayor(1,1);

            string fecha = DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day;
            //hace insercion en la tabla reregistro_ref START TRANSACTION;
            sql = " insert into preregistro_ref values(null,'" + referencia + "' ,CURRENT_DATE());";
            mysql.EjecutarSql(sql);

            matricula = this.matriculaREF((this.mayor(1, 1) + 1), car1, car2);

            lis.Add(this.mayor(1,2));//obtiene el ultimo preregistro... id
            lis.Add(referencia);//referencia asignada...
            lis.Add(matricula);// matricula generada para el pregistros 
        }
        catch { }
        return lis;
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="idr">id de pre-registro</param>
    /// <param name="op1">carrera opcion 1</param>
    /// <param name="op2">carrera opcion 2</param>
    /// <returns>matricula generada de 8 digitos</returns>
    private string matriculaREF(int idr, string op1, string op2){
        string mat = "";

        if (idr < 10)
            mat = "100" + op1 + "" + op2 + "" + idr;
        if (idr > 9 && idr < 100)
            mat = "10" + op1 + "" + op2 + "" + idr;
        if (idr > 99)
            mat = "1" + op1 + "" + op2 + "" + idr;
        return mat;
    }

    /// <summary>
    /// regresa el ultimo id que se insertó en la tabla preregistro
    /// </summary>
    /// <returns></returns>
    private int ultimoId() {
        int id = 0;
        sql = "select max(idpreregistro) from preregistro;";
        try {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read()) {
                    id = mysql.DatosConsulta.GetInt32(0);
                }
            }

        }catch{}

        return id;
    }
    /// <summary>
    /// metodo que ejecuta un rollback.
    /// </summary>
    private void rollback() {
        sql = "rollback;";
        try
        {
            mysql.AbrirConexion();
            mysql.EjecutarSql(sql);
            mysql.CerrarConexion();
        }
        catch { }
    }
}